package com.wei.czz.common.dto.common.multiDict;

import com.wei.czz.common.enums.common.multiDIct.MultiDictEnum;
import com.wei.czz.common.tool.BaseEntity;
import com.wei.czz.framework.common.entity.MultiDictEntity;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

import java.util.Date;
import java.util.TreeSet;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wyw
 * date: 2023-12-26 16:53:59
 * className: MultiDictDto
 * version: 1.0
 * description:
 */
@Getter
@Setter
@Accessors(chain = true)
public class MultiDictDto extends BaseEntity implements Comparable<MultiDictDto> {

    /**
     * 主键
     */
    private String id;

    /**
     * 父级主键
     */
    private String parentId;

    /**
     * 父级路径
     */
    private String parentPath;

    /**
     * 类型
     */
    private Integer type;

    /**
     * 类型名称
     */
    private String typeName;

    /**
     * 名称
     */
    private String name;

    /**
     * 字符串值
     */
    private String value;

    /**
     * 排序等级
     */
    private Integer sort;

    /**
     * 状态[0-可用 1-禁用]
     */
    private Integer status;

    /**
     * 默认状态[0-是 1-否]
     */
    private Integer defaultStatus;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 更新用户
     */
    private String updateUser;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 创建用户
     */
    private String createUser;

    /**
     * 状态[true-禁用 false-可用]
     */
    private Boolean disabled;

    /**
     * 子级联字典集合
     */
    private TreeSet<MultiDictDto> children;

    @Override
    public int compareTo(MultiDictDto o) {
        int res = sort.compareTo(o.sort);
        if (res == 0) {
            res = createTime.compareTo(o.createTime);
            if (res == 0) {
                res = Long.valueOf(id).compareTo(Long.valueOf(o.id));
            }
        }
        return res;
    }

    /**
     * 级联字典对象映射
     * @param multiDict 级联字典对象
     * @return 映射结果
     */
    public static MultiDictDto map(MultiDictEntity multiDict) {
        MultiDictDto multiDictDto = new MultiDictDto();
        multiDictDto.setId(multiDict.getId().toString())
                .setParentId(multiDict.getParentId().toString())
                .setParentPath(multiDict.getParentPath())
                .setType(multiDict.getType())
                .setTypeName(MultiDictEnum.getName(multiDict.getType()))
                .setName(multiDict.getName())
                .setValue(multiDict.getValue())
                .setSort(multiDict.getSort())
                .setStatus(multiDict.getStatus())
                .setDefaultStatus(multiDict.getDefaultStatus())
                .setCreateTime(multiDict.getCreateTime())
                .setCreateUser(multiDict.getCreateUser())
                .setDisabled(Boolean.FALSE);
        return multiDictDto;
    }
}
